// 数据库连接JS
var MongoDB=require('mongodb');
var MongoClient =MongoDB.MongoClient;
var Config=require('./config.js');

class DB{
	// 单例应用
	static getInstance(){
		if(!DB.insance){
			DB.insance=new DB();
		}
		return DB.insance;
	}
	constructor(){ //构造函数
		this.dbClient='';
		// this.connect();
	}
	connect(){ //连接数据库
		return new Promise((resolve,reject)=>{
			if(!this.dbClient){
				MongoClient.connect(Config.dbUrl,(err,client)=>{
					if(err){
							reject(err)
					}else{
						this.dbClient=client.db(Config.dbName);
						resolve(this.dbClient)
					}
				})
			}else{
				resolve(this.dbClient)
			}
		})
		
	}
	insert(collectionName,json){ //插入 新增
		return new Promise((resolve,reject)=>{
			this.connect().then((db)=> {
				db.collection(collectionName).insertOne(json,(err,result)=>{
					if(err){
						reject(err)
					}else{
						resolve(result)
					}
				});
			})
		})
	}
	find(collectionName,json){ //查找
		return new Promise((resolve,reject)=>{
			this.connect().then((db)=> {
				let result=db.collection(collectionName).find(json);
				result.toArray((err,docs)=>{
					if(err){
						reject(err);
					}else{
						resolve(docs);
					}
				})
			})
		})
		
	}
	remove(collectionName,json){ //删除 移除
		return new Promise((resolve,reject)=>{
			this.connect().then((db)=> {
				db.collection(collectionName).removeOne(json,(err,result)=>{
					if(err){
						reject(err)
					}else{
						resolve(result)
					}
				})
			})
		})
	}
	upData(collectionName,json,newJson){ //更新
		return new Promise((resolve,reject)=>{
			this.connect().then((db)=> {
				db.collection(collectionName).updateOne(json,{
					$set:newJson
				},(err,result)=>{
					if(err){
						reject(err)
					}else{
						resolve(result)
					}
				})
			})
		})
	}
	upDatas(collectionName,json,newJson){ //更新 批量
		return new Promise((resolve,reject)=>{
			this.connect().then((db)=> {
				db.collection(collectionName).update(json,{
					$set:newJson
				},(err,result)=>{
					if(err){
						reject(err)
					}else{
						resolve(result)
					}
				})
			})
		})
	}
}

// console.log('Config.dbUrl',Config.dbUrl)

// var myDb=DB.getInstance();
// myDb.find('user',{}).then((data)=>{
// 	console.log(data)
// });

module.exports=DB.getInstance();